﻿namespace Tab2Sql
{
    #region HandlingOfColumnNames enum

    /// <summary>
    /// different levels of columnName mangling
    /// </summary>
    public enum HandlingOfColumnNames
    {
        /// <summary>
        /// Leave columnName names alone.
        /// </summary>
        NoChanges,
        /// <summary>
        /// Surround columnName names with [ and ] or DoubleQuotes
        /// </summary>
        JustAddQuotes,
        /// <summary>
        /// Remove any funky symbols, spaces, and pretty much anything that isn't a letter or number. AND quote delimit them.
        /// </summary>
        Standard,
        /// <summary>
        /// Turn spaces into underscores. 
        /// </summary>
        UseUnderscores
    }

    #endregion

    /// <summary>
    ///
    /// </summary>
    public enum DelimiterEnum
    {
        /// <summary>
        /// Char(9)
        /// </summary>
        Tab,
        /// <summary>
        /// Char(44)
        /// </summary>
        Comma,
        /// <summary>
        /// Char(124)
        /// </summary>
        Pipe,
        /// <summary>
        /// Not implemented
        /// </summary>
        Fixed,
        /// <summary>
        /// Arbritrary user supplied delimiter.
        /// </summary>
        Other
    }

    /// <summary>
    /// 
    /// </summary>
    public enum List2CSVSortBy
    {
        /// <summary>
        /// Sort by Name (i.e. key)
        /// </summary>
        Name,
        /// <summary>
        /// Sort by Length of string value. Default is ascending.
        /// </summary>
        Length,
        /// <summary>
        /// Interpret the value as date and sort in ascending chronological order.
        /// </summary>
        ValueDate,
        /// <summary>
        /// Interpret the value as string and order in ascending alphabetical order.
        /// </summary>
        ValueAlpha,
        /// <summary>
        /// Interpret the value as numeric and order in ascending order.
        /// </summary>
        ValueNumeric,
        /// <summary>
        /// No specified order. The order will return in whatever way it feels. (Not necessarily consistent either). 
        /// </summary>
        None
    }
    /// <summary>
    ///
    /// </summary>
    public enum OutputTypes
    {
        /// <summary>
        /// Output statement in full, with all rows.
        /// </summary>
        Default,
        /// <summary>
        /// Output statement and some rows.
        /// </summary>
        LimitedOutput,
        /// <summary>
        /// Just the CREATE TABLE statement.
        /// </summary>
        JustCreateStatement,
        /// <summary>
        /// Data Output
        /// </summary>
        DataOutput,
		/// <summary>
		/// No Output Created - Just Initialize DataTable 
		/// </summary>
		DataTableOnly
    }
    /// <summary>
    ///
    /// </summary>
    public enum NumericStatus
    {
        /// <summary>
        ///
        /// </summary>
        NotNumeric,
        /// <summary>
        ///
        /// </summary>
        GeneralNumeric,
        /// <summary>
        ///
        /// </summary>
        ScientificNotation,
        /// <summary>
        ///
        /// </summary>
        HexDecimal,
        /// <summary>
        ///
        /// </summary>
        WholeNumber,
        /// <summary>
        ///
        /// </summary>
        FloatingPoint,
        /// <summary>
        ///
        /// </summary>
        FormattedNumber
    }

    /// <summary>
    /// Affects the output of SQL Statements. T-SQL compatiable with SQL Server 2005/2008 is default.
    /// Not all variants are fully supported.
    /// </summary>
    public enum SqlVariants
    {
        /// <summary>
        /// TSql here refers to MS SQL Server (usually 2005). 
        /// Most of it will work with earlier version of SQL Server and/or Sybase SQL Anywhere except some of the more specific DDL statements.
        /// </summary>
        TSql,
        /// <summary>
        /// For interacting with internal database and SQLite generally.
        /// </summary>
        Sqlite,
        /// <summary>
        /// Target platform here is IDS 11.2
        /// </summary>
        Informix,
        /// <summary>
        /// Most of the statements are aimed broadly at ANSI92 compliant systems.
        /// </summary>
        ANSI,
        /// <summary>
        /// Sql Anywhere 9.02
        /// </summary>
        SqlAnywhere,
        /// <summary>
        /// MS Access 2003
        /// </summary>
        MSAccess
    }

    /// <summary>
    /// bastardised version of sql datatypes used throughout tab2sql. 
    /// </summary>
    public enum DataTypes
    {
        /// <summary>
        /// unknown = default
        /// </summary>
        unknown,
        /// <summary>
        /// SQL Null
        /// </summary>
        NULL,
        /// <summary>
        /// datetime = date (duh)
        /// </summary>
        datetime,
        /// <summary>
        /// integer = whole number
        /// </summary>
        integer,
        /// <summary>
        /// bigint = whole number over one trillion
        /// </summary>
        bigint,
        /// <summary>
        /// numeric = non-whole number. assumes ms sql server 2005 range, i.e. 10^36 or whatever.
        /// </summary>
        numeric,
        /// <summary>
        /// 
        /// </summary>
        numericScientific,
        /// <summary>
        /// percentage - number with % in it less than 1 in most cases.
        /// </summary>
        percentage,
        /// <summary>
        /// varchar = string/text of any kind (defacto default)
        /// </summary>
        varchar
    }
    /// <summary>
    ///
    /// </summary>
    public enum ColumnHeadings
    {
        /// <summary>
        ///
        /// </summary>
        IncludeColumnHeadings,
        /// <summary>
        /// 
        /// </summary>
        None
    }
    /// <summary>
    ///
    /// </summary>
    public enum RowID
    {
        /// <summary>
        ///
        /// </summary>
        AddRowNumber,
        /// <summary>
        ///
        /// </summary>
        AddRowGUID,
        /// <summary>
        ///
        /// </summary>
        None
    }
   
    /// <summary>
    /// 
    /// </summary>
    public enum SqlStatementType
    {
        /// <summary>
        /// In the form INSERT INTO foo VALUES (a,b,c)
        /// </summary>
        Standard,
        /// <summary>
        /// In the form INSERT INTO foo SELECT a,b,c UNION ALL SELECT a2,b2,c2 UNION ALL etc
        /// </summary>
        MultiInsert,
        /// <summary>
        /// NOT IMPLEMENTED
        /// In the form INSERT INTO ExistingTable WITHOUT create table statements.
        /// </summary>
        IntoExisting,
        /// <summary>
        /// TEST
        /// </summary>
        DataMode
    }
    /// <summary>
    /// What sort of capitalisation change has been requested by user?
    /// </summary>
    public enum CaseChangeRequested
    {
        /// <summary>
        /// force all characters to lower.
        /// </summary>
        tolower,
        /// <summary>
        /// force all characters to upper
        /// </summary>
        toupper,
        /// <summary>
        /// change characters to title casing. NOT IMPLEMENTED.
        /// </summary>
        totitle,
        /// change characters to proper casing. NOT IMPLEMENTED.
        toproper,
        /// this does nothing.
        none
    }
   
}